package main

import (
	"fmt"
)

func modify(x *int) {
	*x = 100
}
func main() {
	// 1. &：取地址
	n := 18
	p := &n
	fmt.Println(&p)          // 0xc000006028
	fmt.Printf("p: %T\n", p) // p: *int
	// 2. *：取值
	fmt.Println(*p) // 18

	// 指针传值
	a := 10
	modify(&a)
	fmt.Printf("a: %v\n", a) // a: 100

	// new申请一个内存地址
	var a1 *int
	fmt.Printf("a1: %v\n", a1) // a1: <nil>
	var a2 = new(int)
	fmt.Printf("a2: %v\n", a2) // a2: 0xc0000140e8
	*a2 = 100
	fmt.Printf("*a2: %v\n", *a2) // *a2: 100

	// make 只用与slice、map和chan的内存创建，且返回的就是这三个类型本身，不是指针类型
	var b map[string]int
	b = make(map[string]int, 10)
	b["沙河哪吒"] = 100
	fmt.Printf("b: %v\n", b) // b: map[沙河哪吒:100]
}
